package thread;

import org.junit.Test;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author Duanyu
 * @date 2021-11-15 10:18
 */
public class LockTest {


    @Test
    public void test2() {
        /**
         * synchronized(隐式)和 Lock (显示) 都是可重入锁
         * 如果当前任务有多层锁,只要线程拿到最外层锁,那么不管里面还有多少层锁,这个线程都可以自由进入。
         *
         */

    }


    @Test
    public void test() {

        /**
         * 默认为非公平锁,多个线程执行任务,非公平锁会出现每次都是第一个线程抢到资源,其他线程(饿死)没有资源可执行。
         * 只要发现有资源是"空闲状态"直接抢占所以执行效率高
         *
         * 公平锁：多个线程都能分到资源进行执行(阳光普照),获取资源前进行判断这个资源是否有其他线程在使用,有则排队没有才进行执行,所以效率较低。
         */

        Lock nonFairSync = new ReentrantLock();

        Lock fairSync = new ReentrantLock(true);

    }
}
